System, apparatus and method to facilitate live video streaming

ABSTRACT

Systems and methods for generating a master video stream from at least two live video streams are provided in this disclosure. The systems include a combination component that combines the live video streams to generate the master video stream. In one aspect, the live video streams can be copies of the same recording that are multicast from different locations according to User Datagram Protocol. The live video streams suffer different errors, such as stream corruption or stream error, due to the transmission. The combination component eliminates the errors in the live video streams due to transmission and creates a substantially error-free master video stream.

TECHNICAL FIELD

This disclosure relates to media streaming and, more particularly, toutilizing digital video streams for live video streaming.

BACKGROUND

Media sharing services have become prolific on the internet asconnection speeds have increased giving consumers the ability to upload,for example, their own personal videos. Most media sharing services actstrictly as an intermediary, for example, they give the user a forum todisplay the user's version of a video. The media sharing service canthen host the user uploaded media allowing other users on the internetthe ability to view the uploaded media. Media sharing services are alsocapable of streaming media from a live event. For example, a mediasharing service could host a live sporting event capable of beingdisplayed to users of the media sharing service.

Media sharing services often receive live video streams over networksvia protocols that are subject to stream corruption or stream error. Thestream corruption or stream error may cause visible artifacts duringplayback. Even worse, the stream corruption or stream error, in somecircumstances, may even cause subsequent decoder systems to crash.

SUMMARY

The following presents a simplified summary of the specification inorder to provide a basic understanding of some aspects of thespecification. This summary is not an extensive overview of thespecification. It is intended to neither identify key or criticalelements of the specification nor delineate any scope of particularembodiments of the specification, or any scope of the claims. Its solepurpose is to present some concepts of the specification in a simplifiedform as a prelude to the more detailed description that is presentedlater.

In accordance with one or more embodiments and corresponding disclosure,various non-limiting aspects are described in connection with providinga live video stream.

In accordance with a non-limiting embodiment, a system is provided thatincludes at least one media content generator that generates at leasttwo live video streams. The at least two live video streams are combinedby a combination component. The combination component generates a mastervideo stream from the combined at least two live video streams.According to an aspect, the system further includes a synchronizationcomponent that synchronizes the at least two live video streams. Thesynchronization component synchronizes the at least two live videostreams, to facilitate their combination, by matching fingerprints orother metadata of various segments.

According to a further non-limiting embodiment, a method for generatinga master video stream is provided. At least two live video streams arereceived and combined. The master video stream is generated from thecombination of the at least two live video streams. According to anaspect, the master video stream is substantially error free. Thesubstantially error free master stream is generated by correcting atleast two live video streams that each may suffer stream corruption orstream errors or be subject to other forms of digital errors, such ascorrupted or repeated data. The stream corruption or stream errors ofthe at least two live video streams are corrected by matchingfingerprints of the packets in the at least two live video streams andreplacing lost packets in one data stream with corresponding packets ofthe other data stream.

In another non-limiting embodiment, a computer-readable storage mediumis provided that can perform operations that facilitate generation of amaster video stream. The operations include receiving at least two livevideo streams and generating a master video stream by combining the atleast two live video streams. According to an aspect, the operationsfurther include assigning weights to the at least two live video streamsand combining the at least two live video streams according to theassigned weights. The weights can be assigned based on an originatinglocation, a reliability, or any other parameter of the video streamsthat can be compared.

The following description and the drawings set forth certainillustrative aspects of the specification. These aspects are indicative,however, of but a few of the various ways in which the principles of thespecification may be employed. Other advantages and novel features ofthe specification will become apparent from the following detaileddescription of the specification when considered in conjunction with thedrawings.

BRIEF DESCRIPTION OF THE DRAWINGS

Numerous aspects, embodiments, objects and advantages of the presentinvention will be apparent upon consideration of the following detaileddescription, taken in conjunction with the accompanying drawings, inwhich like reference characters refer to like parts throughout, and inwhich:

FIG. 1 illustrates an example non-limiting system that facilitatesgeneration of a master media stream, in accordance with various aspectsand implementations described herein;

FIG. 2 illustrates an example non-limiting system that synchronizes atleast two media streams to facilitate combination of the at least twolive video streams, in accordance with various aspects andimplementations described herein;

FIG. 3 illustrates an example non-limiting depiction of the generationof at least two live video streams, in accordance with various aspectsand implementations described herein;

FIG. 4 illustrates an example non-limiting depiction of the processingof video streams at different geographic locations, in accordance withvarious aspects and implementations described herein;

FIG. 5 illustrates an example non-limiting system that facilitatesservice of a master video stream to an end-user, in accordance withvarious aspects and implementations described herein;

FIG. 6 illustrates an example non-limiting depiction of a legend showingdifferent types of packets transmitted in a video stream, in accordancewith various aspects and implementations described herein;

FIG. 7 illustrates an example non-limiting depiction of different videostreams with different stream corruption or stream errors that areutilized in the generation of a master video stream, in accordance withvarious aspects and implementations described herein;

FIG. 8 illustrates an example non-limiting system that facilitates thegeneration of a master video stream at a data center by combing videostreams according to a recipe, in accordance with various aspects andimplementations described herein;

FIG. 9 illustrates an example non-limiting system that generates amaster video stream by replacing packets in a local video stream withpackets from external video streams, in accordance with various aspectsand implementations described herein;

FIG. 10 illustrates an example non-limiting system that facilitates thegeneration of a master video stream at a data center by compensating forstream corruption or stream errors in a local video stream with packetsfrom external video streams according to a recipe, in accordance withvarious aspects and implementations described herein;

FIG. 11 illustrates an example non-limiting method for generating amaster video stream, in accordance with various aspects andimplementations described herein;

FIG. 12 illustrates an example non-limiting method for generating asubstantially error-free master video stream from at least two livevideo streams that have suffered stream corruption or stream error, inaccordance with various aspects and implementations described herein;

FIG. 13 illustrates an example non-limiting method for using weightsassigned to video streams that have suffered stream corruption or streamerror to generate a master video stream, in accordance with variousaspects and implementations described herein;

FIG. 14 illustrates a schematic diagram of an exemplary non-limitingnetworked or distributed computing environment for implementing one ormore embodiments described herein; and

FIG. 15 illustrates a block diagram representing an exemplarynon-limiting computing system or operating environment in which variousembodiments can be implemented.

DETAILED DESCRIPTION

Various aspects or features of this disclosure are described withreference to the drawings, wherein like reference numerals are used torefer to like elements throughout. In this specification, numerousspecific details are set forth in order to provide a thoroughunderstanding of this disclosure. It should be understood, however, thatthe certain aspects of disclosure may be practiced without thesespecific details, or with other methods, components, materials, etc. Inother instances, well-known structures and devices are shown in blockdiagram form to facilitate description and illustration of theinnovation.

It is to be appreciated that in accordance with one or more embodimentsor implementations described in this disclosure, multiple copies of alive video stream can be received over a network. When used herein, theterm “video stream” will be understood as referring to a live videostream. The multiple copies of the video stream can each suffer variousstream corruptions or errors. The stream corruptions or errors in themultiple copies of the video stream can be corrected and the correctedvideo stream can be stored and served to end-users. The corrected videostream eliminates visible artifacts and other problems associated withstream corruption or stream errors.

Referring now to the drawings, with reference initially to FIG. 1, asystem 100 that facilitates generation of a master video stream ispresented. Aspects of the systems, apparatuses or processes explained inthis disclosure can constitute machine-executable component(s) embodiedwithin machine(s), e.g., embodied in one or more computer readablemediums (or media) associated with one or more machines. Suchcomponent(s), when executed by the one or more machines, e.g.,computer(s), computing device(s), virtual machine(s), etc. can cause theone or more machines to perform the operations described. System 100 caninclude memory for storing computer executable components andinstructions and one or more processors can facilitate operation of thecomputer executable components and instructions by the system 100.

In an embodiment, system 100 can include one or more media contentgenerators 102 and a combination component 108. System 100 represents asystem that can be employed in one or more computers or devices in oneor more data centers to provide a master media stream 110. The one ormore media content generators 102 generate at least two media streams104 a, 104 b. Although generation of just two data streams isillustrated, it will be understood that the one or more media contentgenerators 102 can generate any number (N) of media streams greater thanor equal to two. According to an embodiment, the number of media streamsgenerated can be four (N=4). According to another embodiment, the numberof media streams generated can be any odd number greater than 3 (N>3).In an embodiment, the media streams 104 a, 104 b can be identical copiesof each other. According to another embodiment, the media streams 104 a,104 b can be different from each other (e.g., the media streams 104 a,104 b can be encoded differently from each other).

The master media stream 100 can be substantially error free throughcombination of two or more media streams 104 a, 104 b by the combinationcomponent 108. The combination component 108 can utilize footprints orother metadata 106 a, 106 b associated with the media streams 104 a, 104b to match various segments or packets of the media streams 104 a, 104 bto facilitate the combination. The combination component 108 can utilizematch segments of the media streams 104 a, 104 b and replace lostsegments of one media stream 104 a or 104 b with complete segments ofanother media stream 104 a or 104 b.

As used herein, the term “media” can include any multimedia data.Examples of multimedia data include but are not limited to: video data,audio data, video game data, or any other type of data that can bestreamed. The term “segment,” as used herein, refers to any part of amedia stream. For example, a segment of the media stream can be a packetof a video stream that is transmitted via User Datagram Protocol (UDP).Digital video streams are often transmitted over networks via unreliableprotocols, like UDP, that are subject to stream corruption or streamerrors. Digital video streams are divided into packets or datagrams andtransmitted according to UDP; however, UDP does not provide forsequencing the packets for reassembly of the digital video streams. Theinability to sequence the packets leads to stream corruption or streamerrors. During playback of the digital video stream, stream corruptionor stream errors can cause visible artifacts. In some situations, thestream corruption or stream errors can cause subsequent decoder systemsto crash. It will be understood that a segment of a media stream canrefer to any part of the media stream that is transmitted via anyprotocol from a source to a destination. For example, the media streamcan be transmitted across a more reliable protocol, such as TCP/IP.

Referring now to FIG. 2, illustrated is a system 200 that synchronizesat least two media streams 104 a, 104 b to facilitate combination of theat least two live video streams 104 a, 104 b. According to anembodiment, system 200 can include one or more media content generators102, a synchronization component 202, and a combination component 108.The one or more media content generators provide two or more mediastreams 104 a, 104 b. The two or more media streams 104 a, 104 b andfingerprints or other metadata 106 a, 106 b associated with the mediastreams 104 a, 104 b are sent to the synchronization component 202. Thesynchronization component can synchronize the at least two live videostreams 104 a, 104 b to facilitate combination of the at least two livevideo streams 104 a, 104 b into a master media stream 110 by thecombination component 108.

In an embodiment, the synchronization component 202 can match afingerprint or other associated metadata 104 a of a segment of a mediastream 104 a to a fingerprint or other associated metadata 104 b of acorresponding segment of another media stream 104 b. When used herein,“fingerprints” refer to metadata associated with a set of data packetsof a segment of a media stream. The synchronization component 202creates synchronized media streams 204 a, 204 b that are sent to thecombination component 108 to facilitate generation of the master mediastream 110.

The systems 100 and 200 of FIGS. 1 and 2 can be utilized in thegeneration of a master media stream 110 from two or more of any type ofmedia stream. FIGS. 3-10 illustrate embodiments and aspects of thedisclosure with respect to a specific example: a video stream. It willbe understood that the embodiments and aspects described with respect toa video stream in FIGS. 3-10 can be employed with any media stream inthe systems 100 and 200 of FIGS. 1 and 2.

Illustrated in FIG. 3 is an example non-limiting depiction 300 of thegeneration of at least two live video streams 306, 308. The at least twolive video streams 306, 308 can be generated by a media contentgenerator 102. The media content generator 102, according to anembodiment, can include a camera 302 and an encoder 304.

The camera 302 can record video data related to any event. For example,the camera can record video data of a live event. According to anembodiment, the live event can be a sporting event. However, the eventneed not be limited to a live event.

The video data can be sent to an encoder 304 that can encode the videodata for transmission across a protocol to at least two data centers(data centers A and B as shown in FIG. 3). For example, data center Acan receive a video stream A 306 from the encoder 304, while data centerB can receive a separate video stream B 308 from the encoder 304.

Data center A is located at geographic location A 310. Similarly, datacenter B is located at geographic location B 312. Geographic location Aand geographic location B, according to an embodiment, can be locatedremotely from each other. For example, geographic location A can be inNorth America, while geographic location B can be in Europe. However, itwill be understood that geographic locations A and B need not be locatedremotely from each other. For example, geographic locations A and B canboth be located in the same facility in the United States, but thegeographic locations A and B can correspond to different hardware orsoftware that receive the different video streams 306, 308.

FIG. 4 illustrates an example non-limiting depiction 400 of theprocessing of video streams 306, 308 at the different data centerslocated at different geographic locations A and B 310, 312. Data centerA at geographic location A 310 includes a router (Router A) 402 thatsends the video stream 306 to another router (Router A1) 406 for furtherdistribution. The router (Router A) 402 also sends a copy of the videostream 306 to still another router (Router A2) 408. The routers (RouterA1 and Router A2) 406 and 408 facilitate transmission of thecorresponding video stream 306 and copy of the video stream 306 tocorresponding agents (Agent A1 and Agent A2) 414 and 416.

“Agents” are different “destination points” for the video stream 306 andthe copy of the video stream 306 and are associated with storage devices422, 424 that provide at least temporary storage of video segments 104a, 104 b corresponding to video stream 306 or the copy of the videostream 306 and associated metadata 106 a, 106 b. The storage 422, 424can be memory or disk based. According to an embodiment, disk basedstorage is utilized because disk based storage provides a higher degreeof reliability since the disk based storage is persistent even in thepresence of agent 414, 416 failure.

The agents (Agent A1 and Agent A2) 414 and 416 determine fingerprints orother metadata associated with packets of the video stream 306 and thecopy of the video stream 306. Packets of the video stream 104 a, 104 band the associated fingerprints or other metadata 106 a, 106 b are atleast temporarily stored in storage devices 422 and 424 at differentlocations within geographic location A 310. As a non-limiting example,if geographic location A 310 were the United States, router 402 can belocated in New York City, while router 406, agent 414 and storage device422 can be located in New York City and router 406, agent 416 andstorage device 424 can be located in Boston. It will be understood thatthe United States, New York City and Boston can be any country, state,province, or territory.

In a non-limiting example, video stream A 306 and the copy of videostream A can be multicast via UDP or UDP over network tunnels to thevarious routers 402, 406, 408 or agents 414, 416. According to anembodiment, the video stream A 306 and the copy of video stream A 306can be received as encapsulated MEG2 Transport Streams (M2TS), which canbe further encapsulated by real time transfer protocol (RTP). However,other formats, such as flash video (FLV) over real time messagingprotocol (RTMP) are possible.

At each transmission, the video stream A 306 and the copy of videostream A 306 can suffer stream corruption or stream errors. When usedherein, “stream corruption or stream errors” refer to video segmentsthat are missing, corrupt, or otherwise damaged. The stream corruptionor stream errors of video stream A 306 and the copy of video stream A306 are assumed to be independent. In other words, video stream A 306suffers stream corruption or stream errors that do not correlate withthe stream corruption or stream errors of the copy of video stream A306. Similarly, the stream corruption or stream errors of video stream A306 are assumed to be independent of the stream corruption or streamerrors of video stream B.

Similarly to the data center located at location A 310, the data centerlocated at location B 312 includes a router (Router B) 404 that sendsthe video stream 308 to another router (Router B1) 410 for furtherdistribution. The router (Router B) 404 also sends a copy of the videostream 308 to another router (Router B2) 412. The routers (Router B1 andRouter B2) 410 and 412 facilitate transmission of the correspondingvideo stream 308 and copy of the video stream 308 to correspondingagents (Agent B1 and Agent B2) 418 and 420. According to an embodiment,the video stream B 308 and the copy of video stream B 308 can bereceived as encapsulated MEG2 Transport Streams (M2TS), which can befurther encapsulated by real time transfer protocol (RTP). However,other formats, such as flash video (FLV) over real time messagingprotocol (RTMP) are possible.

The agents (Agent B1 and Agent B2) 418 and 420 determine fingerprints orother metadata associated with packets of the video stream 308 and thecopy of the video stream 308. Packets of the video stream 104 c, 104 dand the associated fingerprints or metadata 106 c, 106 d are stored instorage devices 426 and 428 at different locations within geographiclocation B 312.

In a non-limiting example, similarly to video stream A 306, video streamB 308 and the copy of video stream B 306 can be multicast via UDP or UDPover network tunnels to the various routers 404, 410, 412 or agents 418,420. At each transmission, the video stream B 308 and the copy of videostream B 308 can suffer stream corruption or stream errors. The streamcorruption or stream errors of video stream B 308 and the copy of videostream B 308 are assumed to be independent. In other words, video streamB 308 suffers stream corruption or stream errors that do not correlatewith the stream corruption or stream errors of the copy of video streamB 308. The stream corruption or stream errors of video stream B 308 arealso assumed to be independent of the stream corruption or stream errorsof video stream A 306.

The depictions 300 and 400 of FIGS. 3 and 4 can be utilized inconnection with system 500 of FIG. 5 to facilitate service of a mastervideo stream 110 a, 110 b, 110 c, 110 d to an end-user. The systemincludes a stitcher 502 that fetches the potentially corrupt videostreams 104 a, 104 b, 104 c, 104 d, detects errors, and corrects theerrors. According to an embodiment, the stitcher 502 can correct errorsby replacing a packet with errors with an error free packet from adifferent stream. In another embodiment, the stitcher 502 can facilitatecorrection of the error in the stream. The stitcher 502 includes thecombination component 108 as described with regard to FIG. 1.Optionally, according to an embodiment, the stitcher 502 can alsoinclude the synchronization component 202, as described with regard toFIG. 2.

The stitcher 502 can receive video streams 104 a, 104 b, 104 c, 104 dand associated fingerprints or other metadata 106 a, 106 b, 106 c, 106 dfrom different locations. According to an embodiment, the stitcher canreceive video 104 a, 104 b and corresponding fingerprints or othermetadata 106 a, 106 b from storage 422 and 424 from data location A ofFIG. 4 and receive video 104 c, 104 d and corresponding fingerprints andother metadata 106 a, 106 b from storage 426 and 428 of data center B ofFIG. 4.

The combination component 108 of the stitcher 502 can combine the videostreams 104 a, 104 b, 104 c, 104 d to detect and eliminate errors in thevideo streams 104 a, 104 b, 104 c, 104 d. The combination component 108can detect corrupt segments, missing segments, duplicated segments, andspurious segments. According to an embodiment, the combination component108 does not need to detect the specific type of error. For example. Thecombination component 108 can detect corrupt segments and spurioussegments as the same kind of “noise.”

The combination component 108 can eliminate any detected streamcorruption or stream errors or errors and produce redundant mastercopies 110 a, 110 b, 110 c, 110 d that are sent to storage devices 504,506, 508, 510. Although the storage devices 504, 506, 508, 510 areillustrated as separate storage devices from storage 422, 424, 426, 428,it will be understood that the storage devices can be the same (e.g.,storage 422 corresponds to storage 504, storage 424 corresponds tostorage 506, storage 426 corresponds to storage 508, storage 428corresponds to storage 508).

The redundant master copies 110 a, 110 b, 110 c, 110 d do not sufferfrom stream corruption or stream errors in video streams 104 a, 104 b,104 c, 104 d. The combination component 108 combines video streams 104a, 104 b, 104 c, 104 d to eliminate any stream corruption or streamerrors so that the master copies 110 a, 110 b, 110 c, 110 d aresubstantially error free. According to an embodiment, thesynchronization component 202 can synchronize the video streams 104 a,104 b, 104 c, 104 d according to the associated fingerprints or metadata106 a, 106 b, 106 c, 106 d. The synchronization component 202 canfacilitate the combination of the video streams 104 a, 104 b, 104 c, 104d by the combination component 108 into the redundant master videostreams 110 a, 110 b, 110 c, 110 d.

The system 500 also includes a video server 512 that can facilitateservice of one of the redundant mater video streams 110 a, 110 b, 110 c,110 d to an end-user, The video server 512 can access any storagelocation 504, 506, 508, 510 to facilitate service. According to anembodiment, the video server can access a storage location 504, 506,508, 510 according to load of each storage location, reliability of eachstorage location, location of each storage location, a predefined accessschedule for each storage location, or any other parameter that can beused to determine which of the storage locations can serve the videofeed to the end-users quickly and accurately.

FIGS. 6 and 7 illustrate depictions 600, 700 of different video streamswith different stream corruption or stream errors that can be used togenerate a substantially error free master video stream. FIG. 6illustrates a legend 600 of the different types of segments or packetspresent in a data stream. For each segment, a video stream is assumed tohave either a video segment 602 without errors or a stream corruption orstream error. Although many types of stream corruption or stream errorcan exist, any stream corruption or stream error is assumed to fall intothe category of either a corrupt video segment 608 or a missing videosegment 610. Corrupt video segments 608 can include any video segmentthat is corrupt, repetitive, spurious, or the like. According to anotherembodiment, certain errors can be ignored.

According to an embodiment, the video segment 602 without errors caninclude a fingerprint 606. The corrupt video segment 608 can alsoinclude a fingerprint 614, but fingerprint 614 can be different from afingerprint that would be given to the same segment with no errors orcorruption. According to an embodiment, the packet can be an abstract orreduced-size value that represents the content. However, the fingerprintdoes not have to be an abstract or reduced-size value that representsthe content. In another embodiment, the packet can be a portion of thecontent or the entire content.

The video segment 602 without errors can also include additionalmetadata. According to an embodiment, the additional metadata caninclude a time stamp 604.

FIG. 7 illustrates a depiction 700 of different video streams withdifferent stream corruption or stream errors that are utilized in thegeneration of a master video stream. The master video stream issubstantially error free, even though the different video streams eachshow different stream corruption or stream errors.

Referring now to FIG. 8, illustrated is a system 800 that facilitatesthe generation of a master video stream 110 at a data center by combingvideo streams according to a recipe 810. System 800 includes thestitcher 502 described with respect to FIG. 5. The stitcher receivesvideo streams from storage 422, 424, 426, 428 located at different datacenters 820, 840, 860, 880. The stitcher 502 performs a deterministicsegmentation of the video streams. According to an embodiment, thestitcher 502 detects certain distinguishing marks in the video streamthat trigger the creation of a segment boundary. Different segmentationapproaches can be employed. According to an embodiment, sequences ofsegments can be combined into longer video segments if packets of avideo stream are very small or determined to be unimportant.

The stitcher 502 can employ the comparison component 108 to compare thedifferent segments of the video streams and perform a correction for anysegments that exhibit errors. According to an embodiment, the comparisoncan be done in a segment-by-segment manner. The segment-by-segmentcomparison allows the stitcher 502 to determine if two or more packetsare equal or unequal. The comparison is made efficient by not comparingthe actual segment contents, but by comparing fingerprints or othermetadata of the segment content. For example, the metadata can include atime code of the segment, a time code of the following segment, and ahash code of the content. In another embodiment, if a metadata-basedcomparison is unavailable, for example because the incoming streams arenot bit identical, video content based similarity metrics can beemployed. Examples of content based similarity metrics include image toimage matching, histogram based matching, feature based matching,compressed domain based matching, or the like.

Comparing the segments based on fingerprints or other metadata allowsthe stitcher 502 to avoid the fetching of actual video segments from thedata centers 820, 840, 860, 880 (or agents at the data centers 820, 840,860, 880). Instead, the stitcher 502 need only fetch a fingerprint orother metadata representation of the video segments, which makes thestitcher 502 efficient both in terms of network bandwidth and CPUutilization. The actual fetching of video data is delayed until thecomparison is complete and the stitcher 502 needs to find a copy of eachsegment of the master video stream 110.

According to an embodiment, the stitcher can create a recipe 810 forcreation of the master video stream 110 to each data center 820, 840,860, 880. Only creation of the master video stream 110 at data center A820 will be described. However, it will be understood that similarrecipes can be created for each data center. The recipe 810 can be sentto a coordinator 802 at the data center 820. Each data center 840, 860,880 has a corresponding coordinator 804, 806, 808 that can operatesimilarly.

The coordinator 802 can retrieve video segments corresponding to therecipe 810. The recipe 810 uses locally stored segments wheneverpossible. Only when a stream corruption or stream error occurs in alocally stored packet does the recipe 810 call for an externally storedsegment.

Although only one external data center (data center D 880) is shown asproviding external packets to the coordinator of data center A 820, itwill be understood that all of the other data centers 840, 860, 880 canprovide external packets to data center A 820. As shown in FIG. 9, theexternal packets can be retrieved from any external data centeraccording to the recipe 810.

FIG. 10 illustrates a system 1000 that is similar to system 800. System1000 facilitates the generation of a master video stream at data centerD 880 by compensating for stream corruption or stream errors in a localvideo stream with packets from external video streams according to arecipe 1002. The recipe 1002 retrieves an external segment when asegment experiences stream corruption or stream error or other error,but defaults back to the local copy when there is no error.

Each other data center 820, 840, 860 is accessible to coordinator 808.The recipe indicates that the external segment can come from data centerA 820, data center B 840, or data center C 860. According to anembodiment, choice of the data center to provide the external segmentcan be based on schedule for switching between external data sources. Inanother embodiment, the choice of the data center to provide theexternal segment can be based on a weight given to the different datacenters 820, 840, 860. The weight can be based on any parameter of thedata center, such as, location, reliability, load, or the like. In thecase of the weight being based on location, data center C 860 can have ahigher weight than data centers A and B 820 and 840 because data centerC 860 is in the same geographic location as data center D 880. However,if there is a general outage in the geographical location, data centersA and B 820 and 840 that are located at a different geographicallocation can have a greater weight than data center C 860.

FIGS. 11-13 illustrate methods and/or flow diagrams in accordance withimplementations of this disclosure. For simplicity of explanation, themethods are depicted and described as a series of acts. However, acts inaccordance with this disclosure can occur in various orders and/orconcurrently, and with other acts not presented and described in thisdisclosure. Furthermore, not all illustrated acts may be required toimplement the methods in accordance with the disclosed subject matter.In addition, those skilled in the art will understand and appreciatethat the methods could alternatively be represented as a series ofinterrelated states via a state diagram or events. Additionally, itshould be further appreciated that the methods disclosed in thisspecification are capable of being stored on an article of manufactureto facilitate transporting and transferring such methods to computingdevices. The term article of manufacture, as used in this disclosure, isintended to encompass a computer program accessible from anycomputer-readable device or computer-readable storage/communicationsmedia.

Referring to FIG. 11, presented is a flow diagram of an exampleapplication of systems described in this specification in accordancewith an embodiment. In an aspect, example method 1100 of a system forgenerating a master video stream is stored in a memory and utilizes aprocessor to execute computer executable instructions to performfunctions. At 1102, at least two live video streams are received (e.g.,using a combination component 108). At 1104, the at least two live videostreams are combined (e.g., using a combination component 108). At 1106,a master video stream is generated from the at least two live videostreams (e.g., using a combination component 108).

Referring to FIG. 12, presented is a flow diagram of an exampleapplication of systems described in this specification in accordancewith an embodiment. In an aspect, example method 1200 of a system for asubstantially error-free master video stream from at least two livevideo streams that have suffered stream corruption or stream error isstored in a memory and utilizes a processor to execute computerexecutable instructions to perform functions. At 1202, a first datastream with a first stream corruption or stream error and a second datastream with a second stream corruption or stream error are received(e.g., using a stitcher 502 from data centers 820, 840, 860, 880). At1204, the first stream corruption or stream error of the first datastream is corrected with a corresponding packet of the second datastream (e.g. using a correction component 108 of a stitcher 502). At1206, a substantially error-free master video stream is generated (e.g.,by stitcher 502).

Referring to FIG. 13, presented is a flow diagram of an exampleapplication of systems described in this specification in accordancewith an embodiment. In an aspect, example method 1300 of a system forusing weights assigned to video streams that have suffered streamcorruption or stream error to generate a master video stream is storedin a memory and utilizes a processor to execute computer executableinstructions to perform functions.

At 1302, weights are assigned to at least three data sources (e.g.,using a coordinator 802, 804, 806, or 808 at a data source 820, 840, 860or 880). For example, the data source associated with the coordinatorcan be assigned the highest or default weight, while the other datasources can be assigned weights based on a number of parameters, such aslocation, reliability, load, or the like. At 1304, an error is detectedin a video segment from one of the data sources (e.g., using a stitcher502). At 1306, the error in the video segment is corrected with acorresponding video segment from one of the other data sources accordingto the weight (e.g., using the coordinator 802, 804, 806, or 808 and arecipe 810 from the stitcher 502).

Exemplary Networked and Distributed Environments

One of ordinary skill in the art can appreciate that the variousembodiments described herein can be implemented in connection with anycomputer or other client or server device, which can be deployed as partof a computer network or in a distributed computing environment, and canbe connected to any kind of data store where media may be found. In thisregard, the various embodiments described herein can be implemented inany computer system or environment having any number of memory orstorage units, and any number of applications and processes occurringacross any number of storage units. This includes, but is not limitedto, an environment with server computers and client computers deployedin a network environment or a distributed computing environment, havingremote or local storage.

Creation of a substantially error-free master media stream from at leasttwo media streams located at distributed data centers includes theexchange of information, cache storage and disk storage for objects,such as video streams or portions of video streams. In this regard, avariety of devices may have applications, objects or resources that mayparticipate in the various embodiments of this disclosure.

FIG. 14 provides a schematic diagram of an exemplary networked ordistributed computing environment in which embodiments described hereincan be implemented. The distributed computing environment includescomputing objects 1410, 1412, etc. and computing objects or devices1420, 1422, 1424, 1426, 1428, etc., which can include programs, methods,data stores, programmable logic, etc., as represented by applications1430, 1432, 1434, 1436, 14314. It can be appreciated that computingobjects 1410, 1412, etc. and computing objects or devices 1420, 1422,1424, 1426, 1428, etc. can include different devices, such as personaldigital assistants (PDAs), audio/video devices, mobile phones, MPEG-1Audio Layer 3 (MP3) players, personal computers, laptops, tablets, etc.

Each computing object 1410, 1412, etc. and computing objects or devices1420, 1422, 1424, 1426, 1428, etc. can communicate with one or moreother computing objects 1410, 1412, etc. and computing objects ordevices 1420, 1422, 1424, 1426, 1428, etc. by way of the communicationsnetwork 1440, either directly or indirectly. Even though illustrated asa single element in FIG. 14, communications network 1440 can includeother computing objects and computing devices that provide services tothe system of FIG. 14, and/or can represent multiple interconnectednetworks, which are not shown. Each computing object 1410, 1412, etc. orcomputing objects or devices 1420, 1422, 1424, 1426, 1428, etc. can alsocontain an application, such as applications 1430, 1432, 1434, 1436,1438, that might make use of an application programming interface (API),or other object, software, firmware and/or hardware, suitable forcommunication with or implementation of the various embodiments of thesubject disclosure.

There are a variety of systems, components, and network configurationsthat support distributed storage of media streams and creation of asubstantially error-free master media stream. For example, computingsystems can be connected together by wired or wireless systems, by localnetworks or widely distributed networks. Currently, many networks arecoupled to the Internet, which provides an infrastructure for widelydistributed computing and encompasses many different networks, thoughany network infrastructure can be used for exemplary communications madeincident to the systems as described in various embodiments.

Thus, a host of network topologies and network infrastructures, such asclient/server, peer-to-peer, or hybrid architectures, can be utilized.The client can be a member of a class or group that uses the services ofanother class or group. A client can be a computer process, e.g.,roughly a set of instructions or tasks, that requests a service providedby another program or process. A client can utilize the requestedservice without having to know all working details about the otherprogram or the service itself.

As used in this application, the terms “component,” “module,” “system,”and the like are intended to refer to a computer-related entity, eitherhardware, software, firmware, a combination of hardware and software,software and/or software in execution. For example, a component can be,but is not limited to being, a process running on a processor, aprocessor, an object, an executable, a thread of execution, a program,and/or a computer. By way of illustration, both an application runningon a computing device and/or the computing device can be a component.One or more components can reside within a process and/or thread ofexecution and a component can be localized on one computer and/ordistributed between two or more computers. In addition, these componentscan execute from various computer-readable storage media having variousdata structures stored thereon. The components can communicate by way oflocal and/or remote processes such as in accordance with a signal havingone or more data packets (e.g., data from one component interacting withanother component in a local system, distributed system, and/or across anetwork such as the Internet with other systems by way of the signal).

Moreover, the term “or” is intended to mean an inclusive “or” ratherthan an exclusive “or.” That is, unless specified otherwise, or clearfrom the context, the phrase “X employs A or B” is intended to mean anyof the natural inclusive permutations. That is, the phrase “X employs Aor B” is satisfied by any of the following instances: X employs A; Xemploys B; or X employs both A and B. In addition, the articles “a” and“an” as used in this application and the appended claims shouldgenerally be construed to mean “one or more” unless specified otherwiseor clear from the context to be directed to a singular form.

In a client/server architecture, particularly a networked system, aclient can be a computer that accesses shared network resources providedby another computer, e.g., a server. In the illustration of FIG. 14, asa non-limiting example, computing objects or devices 1420, 1422, 1424,1426, 1428, etc. can be thought of as clients and computing objects1410, 1412, etc. can be thought of as servers where computing objects1410, 1412, etc. provide data services, such as receiving data fromclient computing objects or devices 1420, 1422, 1424, 1426, 1428, etc.,storing of data, processing of data, transmitting data to clientcomputing objects or devices 1420, 1422, 1424, 1426, 1428, etc.,although any computer can be considered a client, a server, or both,depending on the circumstances. Any of these computing devices canprocess data, or request transaction services or tasks that canimplicate the techniques for systems as described herein for one or moreembodiments.

A server can be typically a remote computer system accessible over aremote or local network, such as the Internet or wireless networkinfrastructures. The client process can be active in a first computersystem, and the server process can be active in a second computersystem, communicating with one another over a communications medium,thus providing distributed functionality and allowing multiple clientsto take advantage of the information-gathering capabilities of theserver. Any software objects utilized pursuant to the techniquesdescribed herein can be provided standalone, or distributed acrossmultiple computing devices or objects.

In a network environment in which the communications network/bus 1440can be the Internet, for example, the computing objects 1410, 1412, etc.can be Web servers, file servers, media servers, etc. with which theclient computing objects or devices 1420, 1422, 1424, 1426, 1428, etc.communicate via any of a number of known protocols, such as thehypertext transfer protocol (HTTP). Computing objects 1410, 1412, etc.can also serve as client computing objects or devices 1420, 1422, 1424,1426, 1428, etc., as can be characteristic of a distributed computingenvironment utilized for distributed storage of media streams and thecreation of a master video stream.

Exemplary Computing Device

As mentioned, advantageously, the techniques described herein can beapplied to any suitable device. It is to be understood, therefore, thathandheld, portable and other computing devices and computing objects ofall kinds are contemplated for use in connection with the variousembodiments, i.e., anywhere that a device may wish to read or writetransactions from or to a data store. Accordingly, the below remotecomputer described below in FIG. 15 is but one example of a computingdevice. Additionally, a suitable server can include one or more aspectsof the below computer, such as a media server or other media managementserver components.

Although not required, embodiments can be partly implemented via anoperating system, for use by a developer of services for a device orobject, and/or included within application software that operates toperform one or more functional aspects of the various embodimentsdescribed herein. Software can be described in the general context ofcomputer executable instructions, such as program modules, beingexecuted by one or more computers, such as client workstations, serversor other devices. Those skilled in the art will appreciate that computersystems have a variety of configurations and protocols that can be usedto communicate data, and thus, no particular configuration or protocolis to be considered limiting.

FIG. 15 thus illustrates an example of a suitable computing environment1500 in which one or aspects of the embodiments described herein can beimplemented, although as made clear above, the computing environment1500 is only one example of a suitable computing environment and is notintended to suggest any limitation as to scope of use or functionality.Neither is the computing environment 1500 to be interpreted as havingany dependency or requirement relating to any one or combination ofcomponents illustrated in the exemplary computing environment 1500.

With reference to FIG. 15, an exemplary computing environment 1500 forimplementing one or more embodiments includes a computing device in theform of a computer 1510 is provided. Components of computer 1510 caninclude, but are not limited to, a processing unit 1520, a memory 1530,and a system bus 1522 that couples various system components includingthe system memory to the processing unit 1520. The system memory canstore components, like the stitcher 502, the combination component 108,the coordinator 802, 804, 806, 808, and the like. The processor 1520 canfacilitate execution of the components.

Computer 1510 typically includes a variety of computer readable mediaand can be any available media that can be accessed by computer 1510.The memory 1530 can include computer storage media in the form ofvolatile and/or nonvolatile memory such as read only memory (ROM) and/orrandom access memory (RAM). The data centers 820, 840, 860 and 880 canemploy either volatile or nonvolatile memory or some combinationthereof. By way of example, and not limitation, memory 1530 can alsoinclude an operating system, application programs, other programmodules, and program data.

A user can enter commands and information into the computer 1510 throughinput devices 1540, non-limiting examples of which can include akeyboard, keypad, a pointing device, a mouse, stylus, touchpad, touchscreen, trackball, motion detector, camera, microphone, joystick, gamepad, scanner, video camera or any other device that allows the user tointeract with the computer 1510. A monitor or other type of displaydevice can be also connected to the system bus 1522 via an interface,such as output interface 1550. In addition to a monitor, computers canalso include other peripheral output devices such as speakers and aprinter, which can be connected through output interface 1550.

The computer 1510 can operate in a networked or distributed environmentusing logical connections to one or more other remote computers orremote data centers 820, 840, 860, 880, such as remote computer 1570.The remote computer 1570 can be a personal computer, a server, a router,a network PC, a peer device or other common network node, or any otherremote media consumption or transmission device, and can include any orall of the elements described above relative to the computer 1510. Thelogical connections depicted in FIG. 15 include a network 1572, suchlocal area network (LAN) or a wide area network (WAN), but can alsoinclude other networks/buses e.g., cellular networks.

As mentioned above, while exemplary embodiments have been described inconnection with various computing devices and network architectures, theunderlying concepts can be applied to any network system and anycomputing device or system in which it is desirable to publish orconsume media in a flexible way.

Also, there are multiple ways to implement the same or similarfunctionality, e.g., an appropriate API, tool kit, driver code,operating system, control, standalone or downloadable software object,etc. which enables applications and services to take advantage of thetechniques detailed herein. Thus, embodiments herein are contemplatedfrom the standpoint of an API (or other software object), as well asfrom a software or hardware object that implements one or more aspectsdescribed herein. Thus, various embodiments described herein can haveaspects that are wholly in hardware, partly in hardware and partly insoftware, as well as in software.

Computing devices typically include a variety of media, which caninclude computer-readable storage media and/or communications media, inwhich these two terms are used herein differently from one another asfollows. Computer-readable storage media can be any available storagemedia that can be accessed by the computer, can be typically of anon-transitory nature, and can include both volatile and nonvolatilemedia, removable and non-removable media. By way of example, and notlimitation, computer-readable storage media can be implemented inconnection with any method or technology for storage of information suchas computer-readable instructions, program modules, structured data, orunstructured data. Computer-readable storage media can include, but arenot limited to, RAM, ROM, electrically erasable programmable read onlymemory (EEPROM), flash memory or other memory technology, compact discread only memory (CD-ROM), digital versatile disk (DVD) or other opticaldisk storage, magnetic cassettes, magnetic tape, magnetic disk storageor other magnetic storage devices, or other tangible and/ornon-transitory media which can be used to store desired information.Computer-readable storage media can be accessed by one or more local orremote computing devices, e.g., via access requests, queries or otherdata retrieval protocols, for a variety of operations with respect tothe information stored by the medium.

On the other hand, communications media typically embodycomputer-readable instructions, data structures, program modules orother structured or unstructured data in a data signal such as amodulated data signal (e.g., a carrier wave or other transportmechanism) and include any information delivery or transport media. Theterm “modulated data signal” or signals refers to a signal that has oneor more of its characteristics set or changed in such a manner as toencode information in one or more signals. By way of example, and notlimitation, communication media include wired media, such as a wirednetwork or direct-wired connection, and wireless media such as acoustic,radio frequency (RF), infrared and other wireless media.

It is to be understood that the embodiments described herein can beimplemented in hardware, software, firmware, middleware, microcode, orany combination thereof. For a hardware implementation, the processingunits can be implemented within one or more application specificintegrated circuits (ASICs), digital signal processors (DSPs), digitalsignal processing devices (DSPDs), programmable logic devices (PLDs),field programmable gate arrays (FPGAs), processors, controllers,micro-controllers, microprocessors and/or other electronic unitsdesigned to perform the functions described herein, or a combinationthereof. As it employed in this specification, the term “processor” canrefer to substantially any computing processing unit or devicecomprising, but not limited to comprising, single-core processors;single-processors with software multithread execution capability;multi-core processors; multi-core processors with software multithreadexecution capability; multi-core processors with hardware multithreadtechnology; parallel platforms; and parallel platforms with distributedshared memory. Additionally, a processor can refer to an integratedcircuit, an application specific integrated circuit (ASIC), a digitalsignal processor (DSP), a field programmable gate array (FPGA), aprogrammable logic controller (PLC), a complex programmable logic device(CPLD), a discrete gate or transistor logic, discrete hardwarecomponents, or any combination thereof designed to perform the functionsdescribed in this disclosure. Processors can exploit nano-scalearchitectures such as, but not limited to, molecular and quantum-dotbased transistors, switches and gates, in order to optimize space usageor enhance performance of user equipment. A processor may also beimplemented as a combination of computing processing units.

When the embodiments are implemented in software, firmware, middlewareor microcode, program code or code segments, they can be stored in amachine-readable medium (or a computer-readable storage medium), such asa storage component. A code segment can represent a procedure, afunction, a subprogram, a program, a routine, a subroutine, a module, asoftware package, a class, or any combination of instructions, datastructures, or program statements. A code segment can be coupled toanother code segment or a hardware circuit by passing and/or receivinginformation, data, arguments, parameters, or memory contents.Information, arguments, parameters, data, etc. can be passed, forwarded,or transmitted using any suitable means including memory sharing,message passing, token passing, network transmission, etc.

For a software implementation, the techniques described herein can beimplemented with modules or components (e.g., procedures, functions, andso on) that perform the functions described herein. The software codescan be stored in memory units and executed by processors. A memory unitcan be implemented within the processor or external to the processor, inwhich case it can be communicatively coupled to the processor viavarious structures.

Reference throughout this specification to “one embodiment,” or “anembodiment,” means that a particular feature, structure, orcharacteristic described in connection with the embodiment is includedin at least one embodiment. Thus, the appearances of the phrase “in oneembodiment,” or “in an embodiment,” in various places throughout thisspecification are not necessarily all referring to the same embodiment.Furthermore, the particular features, structures, or characteristics maybe combined in any suitable manner in one or more embodiments.

The words “example” or “exemplary” are used in this disclosure to meanserving as an example, instance, or illustration. Any aspect or designdescribed in this disclosure as “exemplary” is not necessarily to beconstrued as preferred or advantageous over other aspects or designs.Rather, use of the words “example” or “exemplary” is intended to presentconcepts in a concrete fashion. In this specification, terms such as“data store,” “buffer,” and substantially any other information storagecomponent relevant to operation and functionality of a component, referto “memory components,” or entities embodied in a “memory” or componentscomprising the memory. It will be appreciated that the memorycomponents, or computer-readable storage media, described in thisdisclosure can be either volatile memory or nonvolatile memory, or caninclude both volatile and nonvolatile memory. By way of illustration,and not limitation, nonvolatile memory can include read only memory(ROM), programmable ROM (PROM), electrically programmable ROM (EPROM),electrically erasable ROM (EEPROM), or flash memory. Volatile memory caninclude random access memory (RAM), which acts as external cache memory.By way of illustration and not limitation, RAM is available in manyforms such as synchronous RAM (SRAM), dynamic RAM (DRAM), synchronousDRAM (SDRAM), double data rate SDRAM (DDR SDRAM), and enhanced SDRAM(ESDRAM). Additionally, the disclosed memory components of systems ormethods in this disclosure are intended to comprise, without beinglimited to comprising, these and any other suitable types of memory.

What has been described above includes examples of the embodiments ofthe present invention. It is, of course, not possible to describe everyconceivable combination of components or methods for purposes ofdescribing the claimed subject matter, but it is to be appreciated thatmany further combinations and permutations of this innovation arepossible. Accordingly, the claimed subject matter is intended to embraceall such alterations, modifications, and variations that fall within thespirit and scope of the appended claims. Further, the order in whichsome or all of the process blocks appear in each process should not bedeemed limiting. Rather, it should be understood that some of theprocess blocks can be executed in a variety of orders that are notillustrated in this disclosure. Moreover, the above description ofillustrated embodiments of this disclosure, including what is describedin the Abstract, is not intended to be exhaustive or to limit thedisclosed embodiments to the precise forms disclosed. While specificembodiments and examples are described in this disclosure forillustrative purposes, various modifications are possible that areconsidered within the scope of such embodiments and examples, as thoseskilled in the relevant art can recognize.

In particular and in regard to the various functions performed by theabove described components, modules, systems and the like, the termsused to describe such components are intended to correspond, unlessotherwise indicated, to any component which performs the specifiedfunction of the described component (e.g., a functional equivalent),even though not structurally equivalent to the disclosed structure,which performs the function in the herein illustrated exemplary aspectsof the claimed subject matter. The aforementioned systems, devices, andcircuits have been described with respect to interaction between severalcomponents and/or blocks. It can be appreciated that such systems,devices, circuits, and components and/or blocks can include thosecomponents or specified sub-components, some of the specified componentsor sub-components, and/or additional components, and according tovarious permutations and combinations of the foregoing. Sub-componentscan also be implemented as components communicatively coupled to othercomponents rather than included within parent components (hierarchical).Additionally, it should be noted that one or more components may becombined into a single component providing aggregate functionality ordivided into several separate sub-components, and any one or more middlelayers, such as a management layer, may be provided to communicativelycouple to such sub-components in order to provide integratedfunctionality. Any components described in this disclosure may alsointeract with one or more other components not specifically described inthis disclosure but known by those of skill in the art.

In addition, while a particular feature of this innovation may have beendisclosed with respect to only one of several implementations, suchfeature may be combined with one or more other features of the otherimplementations as may be desired and advantageous for any given orparticular application. Furthermore, to the extent that the terms“includes,” “including,” “has,” “contains,” variants thereof, and othersimilar words are used in either the detailed description or the claims,these terms are intended to be inclusive in a manner similar to the term“comprising” as an open transition word without precluding anyadditional or other elements.

What is claimed is:
 1. A system, comprising: at least one media contentgenerator that generates at least two live video streams; anon-transitory memory that stores computer executable components; and aprocessor that executes the following computer executable componentstored within the memory: a combination component that combines the atleast two live video streams to generate a master video stream.
 2. Thesystem of claim 1, wherein the at least two live video streams areidentical copies.
 3. The system of claim 1, wherein the at least twolive video streams are not identical.
 4. The system of claim 3, whereinthe at least two live video streams originate from at least two datacenters at different geographical locations.
 5. The system of claim 4,wherein the at least two live video streams are encoded in differentmanners at the at least two data centers.
 6. The system of claim 1,wherein the at least one media content generator generates N live videostreams, and the combination component combines the N live videostreams, wherein N is at least four.
 7. The system of claim 1, furthercomprising: a synchronization component that synchronizes the at leasttwo live video streams.
 8. The system of claim 7, wherein thesynchronization component matches a fingerprint of a segment of a firstvideo stream of the at least two live video streams to a fingerprint ofa segment of a second video stream of the at least two live videostreams.
 9. The system of claim 8, wherein the fingerprints includemetadata associated with a set of data packets of the segment of thefirst video stream and a set of data packets of the segment of thesecond video stream.
 10. A method, comprising: receiving at least twolive video streams; combining the at least two live video streams; andgenerating a master video stream from the at least two live videostreams.
 11. The method of claim 10, wherein the receiving furthercomprises: receiving the at least two live video streams that aremulticast as at least two data streams according to User DatagramProtocol.
 12. The method of claim 11, wherein the receiving furthercomprises: receiving a first data stream of the at least two datastreams with a first stream corruption or stream error and receiving asecond data stream of the at least two data streams with a second streamcorruption or stream error.
 13. The method of claim 12, furthercomprising: correcting the first stream corruption or stream error ofthe first data stream with a corresponding packet of the second datastream, wherein the first stream corruption or stream error is differentfrom the second stream corruption or stream error.
 14. The method ofclaim 13, wherein the correcting further comprises: identifying afingerprint of a packet of the first data stream that has been lost;searching the second data stream for a packet with a substantiallysimilar fingerprint to the packet of the first data stream; andreplacing the packet of the first data stream that has been lost in themaster video stream with the packet with the substantially similarfingerprint from the second data stream.
 15. The method of claim 11,wherein the receiving further comprises: receiving a first video streamof the at least two data streams from a first location and receiving asecond video stream of the at least two data streams from a secondlocation geographically remote from the first location.
 16. The methodof claim 10, wherein the generating further comprising: generating asubstantially error-free master video stream from the at least two livevideo streams.
 17. A computer-readable storage medium havinginstructions stored thereon that, in response to execution, cause asystem to perform operations, comprising: receiving at least two livevideo streams; and generating a master video stream by combining the atleast two live video streams.
 18. The computer-readable storage mediumof claim 17, wherein the receiving further comprises: receiving at leastthree video streams and assigning at least three weights to the at leastthree video streams; and the generating further comprises: detecting anerror in a segment of one of the at least three video streams; replacingthe segment of the one of the at least two live video streams with acorresponding segment of another stream based on the weight.
 19. Thecomputer-readable storage medium of claim 18, wherein the assigningfurther comprises: assigning the at least three weights to the at leastthree video streams based on originating locations of the at least threevideo streams.
 20. The computer-readable storage medium of claim 18,wherein the assigning further comprises: assigning the at least threeweights to the at least three video streams based on reliabilities ofthe at least three video streams.